package learn.up.java.core.reflect;

import java.lang.reflect.Array;

public class ReflectDemo2 {

	public static void main(String[] args) {
		int[] a={1,5,7,3,24};
        Class<?> cls=a.getClass().getComponentType();
        System.out.println(cls.getName());
		System.out.println(Array.getLength(a));
		System.out.println(Array.get(a, 0));
		Array.set(a, 0, 99);
		System.out.println(Array.get(a, 0));
		int[] ar=(int[])newInstance(a,10);

		print(ar);
	}
	
//	通过反射修改数组大小，内部实际代码是新建了一个数组，把源数组数据复制到新建的数组
	public static Object newInstance(Object obj, int size) {
//		获取源数组元素类型
		Class<?> stl = obj.getClass().getComponentType();
//		获取源数组长度
		int len = Array.getLength(obj);
//		根据参数，新建一个具有和源数组相同类型元素的新数组
		Object newarr = Array.newInstance(stl, size);
//		把源数组数据复制到新数组
		System.arraycopy(obj, 0, newarr, 0, len);
		return newarr;
	}
	public static void print(Object b){
		Class<?> cls=b.getClass();
		if(!cls.isArray()){
			return;
		}
		System.out.println(Array.getLength(b));
		for(int i=0;i<Array.getLength(b);i++){
			System.out.print(Array.get(b,i)+" ");
		}
	}
}
